#!/usr/bin/python
# -*- coding: utf8 -*-

class Poblacion(object):
    
    def __init__(self, agentes, vinculos):
        self.agentes = agentes
        self.vinculos = vinculos
        self._construirGrafo()
        self.iteracion = 0
    
    def _construirGrafo(self):
        self.grafo = {}
        self.pesos = {}

        for n in self.agentes:
            # FIXME: usar blist() en lugar de list()
            self.grafo[n] = set()
        
        for v in self.vinculos:
            extremos = v.extremos()
            a, b = extremos
            self.grafo[a].add(b)
            self.grafo[b].add(a)
            self.pesos[extremos] = v.peso

    def vecinos(self, agente):
        return self.grafo[agente]

    def peso(self, agente, otro_agente):
        return self.pesos[frozenset([agente, otro_agente])]

    def __repr__(self):

        return \
        """
        Poblacion
        Cantidad de agentes: %s
        Cantidad de ejes: %s
        """ % (len(self.agentes), len(self.vinculos))
        
        
class Eje(object):
    
    def __init__(self, a, b, peso):
        self.a = a
        self.b = b
        self.peso = peso

    def extremos(self):
        return frozenset([self.a,self.b])

    def __eq__(self, otro):
        # OJO: No muy predecible
        return self.extremos() == otro.extremos()

